接受客户端发起的连接。调用此方法会立即挂起当前协程,并加入EventLoop
监听可读事件,当Socket
可读有到来的连接时自动唤醒该协程。并返回对应客户端连接的Socket
对象。
该方法必须在使用listen
方法后使用,适用于Server
端。
function Coroutine\Socket->accept(double $timeout = -1) : Coroutine\Socket | false;
$timeout
:设置超时,默认为-1
表示永不超时。设置超时参数后,底层会设置定时器,在规定的时间没有客户端连接到来,accept
方法将返回false
- 超时或
accept
系统调用报错时返回false
,可使用errCode
属性获取错误码,其中超时错误码为ETIMEDOUT
- 成功返回客户端连接的
socket
,类型同样为Swoole\Coroutine\Socket
对象。可对其执行send
、recv
、close
等操作
$socket = new Co\Socket(AF_INET, SOCK_STREAM, 0);
$socket->bind('127.0.0.1', 9601);
$socket->listen(128);
go(function () use ($socket) {
while(true) {
echo "Accept: \n";
$client = $socket->accept();
if ($client === false) {
var_dump($socket->errCode);
} else {
var_dump($client);
}
}
});